package com.yunling.qishi.macaca.utils;

import java.io.File;
import java.io.IOException;
import java.util.HashMap;
import java.util.HashSet;
import java.util.List;
import java.util.Map;
import java.util.Set;


import jxl.read.biff.BiffException;

public class ElementsPool {
	private Map<String, List<String>> elementspool =new HashMap<>();
	private SimpleTools tools = new SimpleTools();
	private ElementsPool(){
		createElementsPool();
		
	}

	public static ElementsPool getElementPool(){
		return LazySingleton.ELEMENTS_POOL;
	}
	
	private static class LazySingleton{
		private static final ElementsPool ELEMENTS_POOL = new ElementsPool();
	}
	
	
	
	
	/**
	 * 获取元素
	 */
	public  List<String> getElements(Enum enum1) {
		
		 return elementspool.get(enum1.toString());	
	}
	
	public List<String> getElements(String str) {
		
		return elementspool.get(str.toString());	
	}
	
	/**
	 * 创建元素池
	 * @throws IOException 
	 * @throws BiffException 
	 */
	private void createElementsPool()  {
		File files = new File(System.getProperty("user.dir")+File.separator+"locate");
		//File files=new File("C:\\Users\\Administrator\\Desktop\\locate");
		/*1.获取元素
		 * 	
		 */
		List<File> travelFolder = tools.travelFolder(files);
		//System.out.println(travelFolder);
		for(File file:travelFolder){
			
			Map<String, Set<List<String>>> sorting;
			try {
				sorting = sorting(file);
				for (String pageobjectname : sorting.keySet()) {
					for (List<String> file2 : sorting.get(pageobjectname)) {
						String page_elementName = file2.get(0)+"_"+file2.get(1);
						elementspool.put(page_elementName, file2);
					}
				}
			} catch (BiffException e) {
				// TODO Auto-generated catch block
				
				e.printStackTrace();
			} catch (IOException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
		}
		
		
		
	}
	
	
	/**
	 * 对一个excel文件进行分拣
	 * @param file 为分拣对像的文件
	 * @return Map<String, Set<List<String>>>  用于分拣String为页面名，Set为元素信息集合，list<String>为每一条元素信息
	 * @throws BiffException
	 * @throws IOException
	 */
	
	private Map<String, Set<List<String>>> sorting(File file) throws BiffException, IOException{
		ExcelUtil excelUtil;
		List<List<String>> readAll;
		List<String> list;
	
		//开始分拣存储，
		//用于分拣String为页面名，Set为元素信息集合，list<String>为每一条元素信息
		Map<String,Set<List<String>> > pageObjects=new HashMap<>();;
		Set<List<String>> pageObject=new HashSet<>();
		//读取文件中的内容
		excelUtil = new ExcelUtil(file.getAbsolutePath());
		readAll = excelUtil.readAll();//行数据  。列数据
		//将文件中的内容进行分拣存储
		for (int i=0;i<readAll.size();i++) {
			//代表每一行数据
			list = readAll.get(i);
			int size = readAll.size();
			//判断是页面名字是否正确,只由数字英文下划线组成
			if (!tools.isRightName(list.get(0))) {
			//	Log.error("页面名字命名错误，只能由数字英文下划线组成，且不能以数字开头"+list.get(0));
				//System.out.println("页面名字命名错误，只能由数字英文下划线组成，且不能以数字开头"+list.get(0));
				continue;
			}
			
			if (!pageObjects.containsKey(list.get(0))) {
				pageObject.add(list);
			}else{
				Log.error("此文件名"+list.get(0)+"已存在");
				continue;
			}
			
			if(i==size-1){
				//重新初始化pageObject，用于存储下一个pageObject信息,同时将当前这一条信息加入
				pageObjects.put(list.get(0),pageObject);
				pageObject=new HashSet<>();//需要注意重置的位置，只有将页面加入到map中才能重置
			}
			if(i<size-1)
				if (!(list.get(0).equals(readAll.get(i+1).get(0)))) {
					
					//重新初始化pageObject，用于存储下一个pageObject信息,同时将当前这一条信息加入
					pageObjects.put(list.get(0),pageObject);
					pageObject=new HashSet<>();
				}

			
		}
		return pageObjects;
	}
	
	
}
